package cn.bugstack.infrastructure.dao;

import cn.bugstack.infrastructure.dao.po.GroupBuyOrderList;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * @description 用户拼单明细
 */
@Mapper
public interface IGroupBuyOrderListDao {

    // 插入一条具体的新拼团消费记录
    void insert(GroupBuyOrderList groupBuyOrderListReq);

    // 通过外部交易单号 查询未支付的订单记录
    GroupBuyOrderList queryGroupBuyOrderRecordByOutTradeNo(GroupBuyOrderList groupBuyOrderListReq);

    // 通过用户id 活动id查询订单
    Integer queryOrderCountByActivityId(GroupBuyOrderList groupBuyOrderListReq);

    // 根据 用户id，外部交易单号 更改订单 消费完成状态
    int updateOrderStatus2COMPLETE(GroupBuyOrderList groupBuyOrderListReq);

    // 查询某个拼团组队的 所有的外部交易单号
    List<String> queryGroupBuyCompleteOrderOutTradeNoListByTeamId(String teamId);

    // 查询 指定用户（userId） 在 指定活动（activityId） 下 count个 进行中（未完成）的拼团订单。
    List<GroupBuyOrderList> queryInProgressUserGroupBuyOrderDetailListByUserId(GroupBuyOrderList groupBuyOrderListReq);

    // 查询 同一活动（activityId）下，其他用户（非当前用户 userId） count个 的进行中拼团订单。
    List<GroupBuyOrderList> queryInProgressUserGroupBuyOrderDetailListByRandom(GroupBuyOrderList groupBuyOrderListReq);

    // 查询 指定活动（activityId）下所有进行中拼团的团队列表（按 team_id 分组）。
    List<GroupBuyOrderList> queryInProgressUserGroupBuyOrderDetailListByActivityId(Long activityId);

    // 未支付，未成团：把该条未支付状态的订单 改为 退单
    int unpaid2Refund(GroupBuyOrderList groupBuyOrderListReq);

    // 已支付，未成团：把该条消费完成状态的订单 改为 退单
    int paid2Refund(GroupBuyOrderList groupBuyOrderListReq);

    // 已支付，已程缘：把该条消费完成状态的订单 改为 退单
    int paidTeam2Refund(GroupBuyOrderList groupBuyOrderListReq);

    // 查询10 条超时未支付订单, 条件：当前时间不在活动时间范围内、状态为0（初始锁定）、out_trade_time 支付时间为空(尚未支付)
    List<GroupBuyOrderList> queryTimeoutUnpaidOrderList();
}
